package com.ruoyi.point.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.point.domain.PointFlow;

/**
 * 积分流水Service接口
 * 
 * @author hy
 * @date 2025-08-12
 */
public interface IPointFlowService 
{
    /**
     * 查询积分流水
     * 
     * @param id 积分流水主键
     * @return 积分流水
     */
    public PointFlow selectPointFlowById(Long id);

    /**
     * 查询积分流水列表
     * 
     * @param pointFlow 积分流水
     * @return 积分流水集合
     */
    public List<PointFlow> selectPointFlowList(PointFlow pointFlow);

    /**
     * 新增积分流水
     * 
     * @param pointFlow 积分流水
     * @return 结果
     */
    public int insertPointFlow(PointFlow pointFlow);

    /**
     * 修改积分流水
     * 
     * @param pointFlow 积分流水
     * @return 结果
     */
    public int updatePointFlow(PointFlow pointFlow);

    /**
     * 批量删除积分流水
     * 
     * @param ids 需要删除的积分流水主键集合
     * @return 结果
     */
    public int deletePointFlowByIds(Long[] ids);

    /**
     * 删除积分流水信息
     * 
     * @param id 积分流水主键
     * @return 结果
     */
    public int deletePointFlowById(Long id);

    /**
     * 查询用户积分明细列表（多表联查）
     * 
     * @param userId 用户ID
     * @return 积分明细列表
     */
    public List<PointFlow> selectPointFlowDetailByUserId(Long userId);

    /**
     * 查询积分明细列表（多表联查，支持分页和筛选）
     * 
     * @param pointFlow 查询条件
     * @return 积分明细列表
     */
    public List<PointFlow> selectPointFlowDetailList(PointFlow pointFlow);

    /**
     * 查询用户积分统计信息
     * 
     * @param userId 用户ID
     * @return 积分统计信息
     */
    public Map<String, Object> selectUserPointStats(Long userId);

    /**
     * 查询用户本月积分统计
     * 
     * @param userId 用户ID
     * @return 本月积分统计
     */
    public Map<String, Object> selectUserMonthPointStats(Long userId);

    /**
     * 查询积分流水完整信息列表（完整多表联查，支持分页和筛选）
     * 
     * @param pointFlow 查询条件
     * @return 积分流水完整信息列表
     */
    public List<PointFlow> selectPointFlowCompleteList(PointFlow pointFlow);

    /**
     * 查询积分流水完整信息列表（优化版本，解决数据查询不完整问题）
     * 
     * @param pointFlow 查询条件
     * @return 积分流水完整信息列表
     */
    public List<PointFlow> selectPointFlowCompleteListOptimized(PointFlow pointFlow);

    /**
     * 查询用户积分流水完整信息（完整多表联查）
     * 
     * @param userId 用户ID
     * @return 积分流水完整信息列表
     */
    public List<PointFlow> selectUserPointFlowComplete(Long userId);

    /**
     * 根据积分规则类型查询相关流水（完整多表联查）
     * 
     * @param ruleType 规则类型
     * @return 积分流水完整信息列表
     */
    public List<PointFlow> selectPointFlowByRuleType(String ruleType);

    /**
     * 查询积分流水完整信息（包含所有关联数据）
     * 
     * @param userId 用户ID
     * @return 积分流水完整信息列表
     */
    public List<PointFlow> selectPointFlowCompleteInfo(Long userId);

    /**
     * 根据积分流水ID查询完整信息（包含所有关联数据）
     * 
     * @param id 积分流水ID
     * @return 积分流水完整信息
     */
    public PointFlow selectPointFlowWithAllRelations(Long id);

    /**
     * 查询积分流水基础信息列表（最简化版本，确保返回所有数据）
     * 
     * @param pointFlow 查询条件
     * @return 积分流水基础信息列表
     */
    public List<PointFlow> selectPointFlowBasicList(PointFlow pointFlow);
}
